/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package practica3;

import io.EscribeFichero;
import io.LeeFichero;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * Clase de prueba de conexión con una base de datos MySQL
 */
public class Practica3BDSI {

    public Practica3BDSI(String[] args) {
// Se utiliza un try para capturar los posibles errores de MySQL
        try {
// Se registra el Driver de MySQL
            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
            /*Se crea una conexión a la base de datos indicando la dirección de la base de datos, el usuario y el
            password*/
            try (Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "")) {
//Se crea un objeto de la clase Statement para poder enviar comandos SQL a la base de datos
                Statement st = conexion.createStatement();
// Se crea una base de datos denominada prueba
                st.executeUpdate("DROP DATABASE IF EXISTS furikuri");
                String[] crearTablas = io.LeeFichero.leer(args[0]);
                String[] rellenarTablas = io.LeeFichero.leer(args[1]);
                String[] consultasTablas = io.LeeFichero.leer(args[2]);
                st.executeUpdate("CREATE DATABASE IF NOT EXISTS furikuri");
//Se cierra el statement
                st.close();
// Seleccionamos la base de datos creada
                conexion.setCatalog("furikuri");
//Se abre un nuevo statement para enviar commandos SQL a la nueva base de datos
                st = conexion.createStatement();
// Se crea una tabla de prueba
                int i = 1;
                while(!crearTablas[i].equals("")){
                    st.executeUpdate(crearTablas[i]);
                    i = i+2;
                }
//Mediante un bucle insertamos los datos en la tabla
                i = 1;
                while(!rellenarTablas[i].equals("")){
                    st.executeUpdate(rellenarTablas[i]);
                    i = i+2;
                }
//Se consultan los datos introducidos y se recuperan los mismos
                i = 1;
                ResultSet rs;
                String escribir="";
                while(!consultasTablas[i].equals("")){
                    rs = st.executeQuery(consultasTablas[i]);                  
                    //En rs se tienen almacenadas las filas recuperadas. Se usa un bucle para recuperar fila a fila
                    //Se cierra la consulta.
                    String res ="";
                    escribir += "\n" + consultasTablas[i-1] + "\n";
                    while(rs.next()){
                        switch (i){
                            case 9: 
                                res = rs.getString("A.Nombre");
                                break;
                            case 11: 
                                res = rs.getString("C.Nombre");
                                break;
                            case 13: 
                                res = rs.getString("D.DescripcionContenido");
                                break;
                            default:
                                res = rs.getString("P.NombreYApellidos");
                                break;
                        }
                     
                     escribir = escribir + res + "\n";  
                    }   
                    rs.close();
                    i = i+2;
                }
                io.EscribeFichero.escribir("Resultado.txt",escribir);
                //Se cierra la conexión.
                st.close();
                conexion.close();
                
            } catch (Exception e) {
                System.out.println(e.toString());
            }
        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }

    public static void main(String[] args) {
        Practica3BDSI javaApplication8 = new Practica3BDSI(args);
    }
}